package com.example.springboot.context;

import org.springframework.beans.factory.SmartInitializingSingleton;
import org.springframework.context.annotation.Configuration;

/**
 * 在所有单例 Bean 初始化完成之后（即容器完成所有 bean 的实例化和依赖注入）执行额外的逻辑。
 * <p>  在spring容器管理的所有单例对象（非懒加载对象）初始化完成之后调用的回调接口。其触发时机为postProcessAfterInitialization之后
 *
 * <p> 场景：这是 Spring 容器启动过程中的一个“最后通知”点，适合用来做一些依赖所有 Bean 的初始化逻辑。
 *
 * <p>
 * <ul>
 *     对比：
 *     <li>InitializingBean.afterPropertiesSet() → 单个 Bean 初始化完成时调用。</li>
 *     <li> @PostConstruct  → 和上面类似，也是 单个 Bean 初始化完成时调用。</li>
 *     <li>SmartInitializingSingleton.afterSingletonsInstantiated() → 所有单例 Bean 都初始化完成时调用，适合跨 Bean 的逻辑。</li>
 *
 * </ul>
 *
 * <p>
 *
 * <p>
 *
 * <p>
 * <p>
 *
 * @author Zhang.Z
 * @version 2025-09-21
 */
@Configuration
public class Test12SmartInitializingSingleton implements SmartInitializingSingleton {

    @Override
    public void afterSingletonsInstantiated() {
        System.out.println("test12 , all bean over, do some else ...");
    }
}
